<!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title>&#x80a1;&#x7968;&#x76d1;&#x63a7;&#x7cfb;&#x7edf;&#x6570;&#x636e;&#x5e93;&#x95ee;&#x9898;&#x89e3;&#x51b3;&#x65b9;&#x6848;</title>
            <style>
/* From extension vscode.github */
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

.vscode-dark img[src$=\#gh-light-mode-only],
.vscode-light img[src$=\#gh-dark-mode-only],
.vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\#gh-light-mode-only],
.vscode-high-contrast-light img[src$=\#gh-dark-mode-only] {
	display: none;
}

</style>
            
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
<style>
            body {
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif;
                font-size: 14px;
                line-height: 1.6;
            }
        </style>
        <style>
.task-list-item {
    list-style-type: none;
}

.task-list-item-checkbox {
    margin-left: -20px;
    vertical-align: middle;
    pointer-events: none;
}
</style>
<style>
:root {
  --color-note: #0969da;
  --color-tip: #1a7f37;
  --color-warning: #9a6700;
  --color-severe: #bc4c00;
  --color-caution: #d1242f;
  --color-important: #8250df;
}

</style>
<style>
@media (prefers-color-scheme: dark) {
  :root {
    --color-note: #2f81f7;
    --color-tip: #3fb950;
    --color-warning: #d29922;
    --color-severe: #db6d28;
    --color-caution: #f85149;
    --color-important: #a371f7;
  }
}

</style>
<style>
.markdown-alert {
  padding: 0.5rem 1rem;
  margin-bottom: 16px;
  color: inherit;
  border-left: .25em solid #888;
}

.markdown-alert>:first-child {
  margin-top: 0
}

.markdown-alert>:last-child {
  margin-bottom: 0
}

.markdown-alert .markdown-alert-title {
  display: flex;
  font-weight: 500;
  align-items: center;
  line-height: 1
}

.markdown-alert .markdown-alert-title .octicon {
  margin-right: 0.5rem;
  display: inline-block;
  overflow: visible !important;
  vertical-align: text-bottom;
  fill: currentColor;
}

.markdown-alert.markdown-alert-note {
  border-left-color: var(--color-note);
}

.markdown-alert.markdown-alert-note .markdown-alert-title {
  color: var(--color-note);
}

.markdown-alert.markdown-alert-important {
  border-left-color: var(--color-important);
}

.markdown-alert.markdown-alert-important .markdown-alert-title {
  color: var(--color-important);
}

.markdown-alert.markdown-alert-warning {
  border-left-color: var(--color-warning);
}

.markdown-alert.markdown-alert-warning .markdown-alert-title {
  color: var(--color-warning);
}

.markdown-alert.markdown-alert-tip {
  border-left-color: var(--color-tip);
}

.markdown-alert.markdown-alert-tip .markdown-alert-title {
  color: var(--color-tip);
}

.markdown-alert.markdown-alert-caution {
  border-left-color: var(--color-caution);
}

.markdown-alert.markdown-alert-caution .markdown-alert-title {
  color: var(--color-caution);
}

</style>
        
        </head>
        <body class="vscode-body vscode-light">
            <h1 id="股票监控系统数据库问题解决方案">股票监控系统数据库问题解决方案</h1>
<h2 id="问题诊断">问题诊断</h2>
<p>✅ <strong>当前状态检查:</strong></p>
<ul>
<li>MySQL服务正在端口3014运行</li>
<li>股票数据获取功能正常</li>
<li>数据库连接被拒绝 (Access denied for user 'root'@'172.26.0.1')</li>
</ul>
<p>❌ <strong>问题原因:</strong><br>
数据库用户权限配置问题，root用户无法从IP地址 172.26.0.1 访问数据库。</p>
<h2 id="解决方案">解决方案</h2>
<h3 id="方案1-修复数据库权限-推荐">方案1: 修复数据库权限 (推荐)</h3>
<ol>
<li>
<p><strong>连接到MySQL数据库:</strong></p>
<pre><code class="language-bash">mysql -u root -p -P 3014
</code></pre>
</li>
<li>
<p><strong>创建或更新用户权限:</strong></p>
<pre><code class="language-sql"><span class="hljs-comment">-- 为当前IP创建权限</span>
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> PRIVILEGES <span class="hljs-keyword">ON</span> stock_monitor.<span class="hljs-operator">*</span> <span class="hljs-keyword">TO</span> <span class="hljs-string">&#x27;root&#x27;</span>@<span class="hljs-string">&#x27;172.26.0.1&#x27;</span> IDENTIFIED <span class="hljs-keyword">BY</span> <span class="hljs-string">&#x27;9528&#x27;</span>;

<span class="hljs-comment">-- 或者允许所有IP访问 (不太安全，但简单)</span>
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> PRIVILEGES <span class="hljs-keyword">ON</span> stock_monitor.<span class="hljs-operator">*</span> <span class="hljs-keyword">TO</span> <span class="hljs-string">&#x27;root&#x27;</span>@<span class="hljs-string">&#x27;%&#x27;</span> IDENTIFIED <span class="hljs-keyword">BY</span> <span class="hljs-string">&#x27;9528&#x27;</span>;

<span class="hljs-comment">-- 刷新权限</span>
FLUSH PRIVILEGES;

<span class="hljs-comment">-- 创建数据库 (如果不存在)</span>
<span class="hljs-keyword">CREATE</span> DATABASE IF <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> stock_monitor;
</code></pre>
</li>
<li>
<p><strong>验证连接:</strong></p>
<pre><code class="language-bash">node stock-manager.js list
</code></pre>
</li>
</ol>
<h3 id="方案2-修改数据库配置">方案2: 修改数据库配置</h3>
<p>修改 <code>.env</code> 文件中的数据库配置:</p>
<pre><code class="language-env"># 使用localhost而不是127.0.0.1
DB_HOST=localhost
# 或者使用标准MySQL端口
DB_PORT=3306
</code></pre>
<h3 id="方案3-使用docker重新部署">方案3: 使用Docker重新部署</h3>
<p>如果使用Docker，可以重新启动MySQL容器:</p>
<pre><code class="language-bash"><span class="hljs-comment"># 停止当前容器</span>
docker-compose down

<span class="hljs-comment"># 重新启动</span>
docker-compose up -d

<span class="hljs-comment"># 查看日志</span>
docker-compose logs mysql
</code></pre>
<h2 id="临时解决方案">临时解决方案</h2>
<p>在数据库问题解决之前，你仍然可以:</p>
<ol>
<li>
<p><strong>查看交易时间状态:</strong></p>
<pre><code class="language-bash">node stock-manager.js status
</code></pre>
</li>
<li>
<p><strong>获取股票数据 (不保存到数据库):</strong></p>
<pre><code class="language-bash">node stock-manager.js update
</code></pre>
<p>虽然会显示数据库错误，但股票数据仍会被获取和显示。</p>
</li>
</ol>
<h2 id="为什么今天不刷新">为什么今天不刷新?</h2>
<p>📊 <strong>交易时间检查结果:</strong></p>
<ul>
<li>当前时间: 2025年8月7日 18:51</li>
<li>交易状态: ❌ 非交易时间 (交易时间: 09:29-15:00)</li>
<li>下次交易: 2025年8月8日 09:29</li>
<li>等待时间: 约22小时37分钟</li>
</ul>
<p><strong>原因:</strong> 当前时间已经超过了股票交易时间(15:00)，系统会自动停止数据更新，等待下一个交易日。</p>
<h2 id="手动强制更新">手动强制更新</h2>
<p>如果你想在非交易时间获取股票数据，可以使用:</p>
<pre><code class="language-bash">node stock-manager.js update
</code></pre>
<p>这会强制获取股票数据，不受交易时间限制。</p>
<h2 id="下一步建议">下一步建议</h2>
<ol>
<li>🔧 <strong>修复数据库权限问题</strong> (使用方案1)</li>
<li>🕐 <strong>等待明天交易时间</strong> (09:29开始自动更新)</li>
<li>📊 <strong>使用手动更新</strong> 获取当前数据</li>
<li>🖥️ <strong>启动Web界面</strong> 查看股票数据</li>
</ol>
<p>启动Web服务器:</p>
<pre><code class="language-bash">node app.js
</code></pre>
<p>然后访问: <a href="http://localhost:3000">http://localhost:3000</a></p>

            
            
        </body>
        </html>